module ysyx_050369_next_pc (
    input           rst,
    input [2:0]     Branch,
    input [31:0]    pc,
    input [31:0]    imm,
    input [31:0]    src1,
    input [63:0]    res,
    output [31:0]   nxpc,
    output          jump_valid

);
    wire PcA;
    reg  PcB;//Pca控制pc或src1，pcb控制imm或者4
    assign  PcA =( ~Branch[2] && Branch[1] && ~Branch[0])?1'b1:1'b0;
    always @(*) begin
        case (Branch)
            3'b000 :PcB = 1'b0    ;  
            3'b001 :PcB = 1'b1    ;  
            3'b010 :PcB = 1'b1    ;  
            3'b100 :PcB = ~(|res) ;
            3'b101 :PcB = |res    ;
            3'b110 :PcB = res[0]  ;
            3'b111 :PcB = !res[0] ;
            default:PcB = 1'b0;
        endcase
    end
    // assign  PcA =1'b0;
    // MuxKeyWithDefault #(7, 3, 1) PcB_choose (PcB, Branch, 1'b0, {
    //     3'b000,1'b0,              //非跳转指令
    //     3'b001,1'b1,              //无条件跳转PC目标
    //     3'b010,1'b1,              //无条件跳转寄存器目标
    //     3'b100,~(|res),             //条件分支，等于
    //     3'b101,|res,             //条件分支，不等于
    //     3'b110,res[0],             //条件分支，小于
    //     3'b111,!res[0]              //条件分支，大于等于
    // });
    assign jump_valid = PcA || PcB;
    assign nxpc = rst?32'h80000000:((PcA?src1:pc)+(PcB?imm:32'h4));
endmodule